C++初级问题,我又又来啦``麻烦进来看看!谢谢~``

来源:百度知道 编辑:UC知道 时间:2024/06/09 03:52:08
题目如下:(求最后x的值?答案是5)
for(int x=0,j=0;j<2;j++) //1
{ //2
x++; //3
for(int i=0;i<=5;i++) //4
if(i%4){x++;} //5
else{continue;x--;} //6
break; //7
x++; //8
} //9
请看下我的分析,看错在哪里哦?
首先x=0,j=0,满足j<2,到第3行。
x++,x==1,到第4行
当i=0时,i%4为假,转到else,continue ,后面的x--不执行,此时x仍然等于1。当i为1时,为真,x++,x为2。是不是到break了?然后到第一行末,j++,满足j<2。
到第3行,x++,x等于2+1==3。第4行开始重复,i=0时,到continue。i=1时,x++,x等于4。然后到break?
j=2,不满足j<2,外面的大循环结束。第8行的x++似乎始终没用到。
这样答案不就是4了吗?到底哪里错了哦?555```
**********************************************************************************************************************************看了大家的答案 非常感谢!但我现在觉得答案是3而不是5了啊!首先内部循环当i等于1和5时,x各加一次1,到break,直接跳出外部循环。所以外部只执行了一次。加上原来第3行的x++ ,那么x的值应该是3啊!
鬼哭神嚎菩提树,我觉得他很对。大家觉得呢? 还请看到的朋友继续回答 谢谢 !答案错了???

您的分析是建立在4-7行如下形式时:
for(int i=0;i<=5;i++){ //4
if(i%4){x++;} //5
else{continue;x--;} //6
break; //7
}//问题就在这一对{}上。

for的作用域没有到break只到第6行。这种问题只要去调试一下就可以明白了,学任何语言都得落实到应用啊。建议去调试一下自己看看。
下面一点一点解释。
鬼哭神嚎菩提树 - 举人 四级和kkspeed - 魔法学徒 一级的那对花扩号是对的,给你表示清楚了原来第二个for的隐式作用域。

还有,答案是5没有错。请注意这个循环体
for(int i=0;i<=5;i++) //4
if(i%4){x++;} //5
else{continue;x--;} //6
第6行的x--其实是无用的,可以等效于
for(int i=0;i<=5;i++) //4
if(i%4){x++;} //5
else{continue;} //6
翻译成比较人类的语言,就是i的值从0到5时不被4整除x就自加1,那么当且仅当i=1,2,3,5时共自加了4次,加上第3行的一次,x总共自加了5次,所以答案是5
还有,这种程序应该算作应试C++,稍微正常一点的人的代码会这么写
(当然还可以更加精简,或者更加好看,更加艺术,这里就不纠缠了)
int x=0;
x++;
for(int i=0;i<=5;i++)
if(i%4){x++;}
else{continue;}
个人意见,仅供参考:
为了考试学C++,多背才是硬道理;为了应用而学C++,多写才是硬道理。
***********************************************************
最后一次更新,说明一点,if(i%4){x++;} 是在表达式i%4非零时x自加,而不是指表达式为结果为1时。
还有,求求你啦,下个编译器运行一下自